home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / scsh-0.4 / scsh-0 / scsh-0.4.2 / scheme48.h < prev    next >
Text File  |  1995-11-04  |  4KB  |  95 lines

  1. typedef long scheme_value;
  2.  
  3. #define FIXNUM_TAG 0
  4. #define FIXNUMP(x) (((long)(x) & 3L) == FIXNUM_TAG)
  5. #define IMMEDIATE_TAG 1
  6. #define IMMEDIATEP(x) (((long)(x) & 3L) == IMMEDIATE_TAG)
  7. #define HEADER_TAG 2
  8. #define HEADERP(x) (((long)(x) & 3L) == HEADER_TAG)
  9. #define STOB_TAG 3
  10. #define STOBP(x) (((long)(x) & 3L) == STOB_TAG)
  11.  
  12. #define ENTER_FIXNUM(n)   ((scheme_value)((n) << 2))
  13. #define EXTRACT_FIXNUM(x) ((long)(x) >> 2)
  14.  
  15. #define MISC_IMMEDIATE(n) (scheme_value)(IMMEDIATE_TAG | ((n) << 2))
  16. #define SCHFALSE    MISC_IMMEDIATE(0)
  17. #define SCHTRUE    MISC_IMMEDIATE(1)
  18. #define SCHCHAR    MISC_IMMEDIATE(2)
  19. #define SCHUNSPECIFIC    MISC_IMMEDIATE(3)
  20. #define SCHUNDEFINED    MISC_IMMEDIATE(4)
  21. #define SCHEOF    MISC_IMMEDIATE(5)
  22. #define SCHNULL    MISC_IMMEDIATE(6)
  23. #define UNDEFINED SCHUNDEFINED
  24. #define UNSPECIFIC SCHUNSPECIFIC
  25.  
  26. #define ENTER_BOOLEAN(n) ((n) ? SCHTRUE : SCHFALSE)
  27. #define EXTRACT_BOOLEAN(x) ((x) != SCHFALSE)
  28.  
  29. #define ENTER_CHAR(c) (SCHCHAR | ((c) << 8))
  30. #define EXTRACT_CHAR(x) ((x) >> 8)
  31.  
  32. #define ADDRESS_AFTER_HEADER(x, type) ((type *)((x) - STOB_TAG))
  33. #define STOB_REF(x, i) ((ADDRESS_AFTER_HEADER(x, long))[i])
  34. #define STOB_TYPE(x)   ((STOB_HEADER(x)>>2)&31)
  35. #define STOB_HEADER(x) (STOB_REF((x),-1))
  36. #define STOB_BLENGTH(x) (STOB_HEADER(x) >> 8)
  37. #define STOB_LLENGTH(x) (STOB_HEADER(x) >> 10)
  38.  
  39. #define STOBTYPE_PAIR 0
  40. #define PAIRP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_PAIR))
  41. #define STOBTYPE_SYMBOL 1
  42. #define SYMBOLP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_SYMBOL))
  43. #define STOBTYPE_VECTOR 2
  44. #define VECTORP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_VECTOR))
  45. #define STOBTYPE_CLOSURE 3
  46. #define CLOSUREP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CLOSURE))
  47. #define STOBTYPE_LOCATION 4
  48. #define LOCATIONP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_LOCATION))
  49. #define STOBTYPE_PORT 5
  50. #define PORTP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_PORT))
  51. #define STOBTYPE_RATIO 6
  52. #define RATIOP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_RATIO))
  53. #define STOBTYPE_RECORD 7
  54. #define RECORDP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_RECORD))
  55. #define STOBTYPE_CONTINUATION 8
  56. #define CONTINUATIONP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CONTINUATION))
  57. #define STOBTYPE_EXTENDED_NUMBER 9
  58. #define EXTENDED_NUMBERP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_EXTENDED_NUMBER))
  59. #define STOBTYPE_TEMPLATE 10
  60. #define TEMPLATEP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_TEMPLATE))
  61. #define STOBTYPE_WEAK_POINTER 11
  62. #define WEAK_POINTERP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_WEAK_POINTER))
  63. #define STOBTYPE_EXTERNAL 12
  64. #define EXTERNALP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_EXTERNAL))
  65. #define STOBTYPE_UNUSED_D_HEADER1 13
  66. #define UNUSED_D_HEADER1P(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_UNUSED_D_HEADER1))
  67. #define STOBTYPE_UNUSED_D_HEADER2 14
  68. #define UNUSED_D_HEADER2P(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_UNUSED_D_HEADER2))
  69. #define STOBTYPE_STRING 15
  70. #define STRINGP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_STRING))
  71. #define STOBTYPE_CODE_VECTOR 16
  72. #define CODE_VECTORP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_CODE_VECTOR))
  73. #define STOBTYPE_DOUBLE 17
  74. #define DOUBLEP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_DOUBLE))
  75. #define STOBTYPE_BIGNUM 18
  76. #define BIGNUMP(x) (STOBP(x) && (STOB_TYPE(x) == STOBTYPE_BIGNUM))
  77.  
  78. #define CAR(x) STOB_REF(x, 0)
  79. #define CDR(x) STOB_REF(x, 1)
  80. #define SYMBOL_TO_STRING(x) STOB_REF(x, 0)
  81. #define CONTENTS(x) STOB_REF(x, 0)
  82. #define LOCATION_ID(x) STOB_REF(x, 1)
  83. #define CLOSURE_TEMPLATE(x) STOB_REF(x, 0)
  84. #define CLOSURE_ENV(x) STOB_REF(x, 1)
  85. #define WEAK_POINTER_REF(x) STOB_REF(x, 0)
  86. #define EXTERNAL_NAME(x) STOB_REF(x, 0)
  87. #define EXTERNAL_VALUE(x) STOB_REF(x, 1)
  88.  
  89. #define VECTOR_LENGTH(x) STOB_LLENGTH(x)
  90. #define VECTOR_REF(x, i) STOB_REF(x, i)
  91. #define CODE_VECTOR_LENGTH(x)  STOB_BLENGTH(x)
  92. #define CODE_VECTOR_REF(x, i)  (ADDRESS_AFTER_HEADER(x, unsigned char)[i])
  93. #define STRING_LENGTH(x)  (STOB_BLENGTH(x)-1)
  94. #define STRING_REF(x, i)  (ADDRESS_AFTER_HEADER(x, char)[i])
  95.